package cliente.GUI;

import java.awt.GridLayout;
import java.awt.event.*;
import java.io.IOException;
import java.sql.SQLException;
import java.util.LinkedList;
import javax.swing.*;
import servidor.*;
import util.SocketManager;

public class VentanaTren extends JFrame
{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * @param args
	 */
	
	JButton salir;
	JButton actualizar;
	PanelSensores sensores;
	SocketManager sock;
	
	public VentanaTren(SocketManager sm) throws SQLException, ClassNotFoundException
	{
		salir = new JButton("SALIR");
		actualizar = new JButton("ACTUALIZAR");
		sensores = new PanelSensores(null);
		sock = sm;
		
		this.add(sensores, "Center");
		JPanel pp = new JPanel();
		pp.add(actualizar);
		JPanel p = new JPanel();
		p.add(salir);
		JPanel s = new JPanel();
		s.setLayout(new GridLayout(1, 2));
		s.add(pp);
		s.add(p);
		this.add(s, "South");
		this.pack();
		
		this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
	    this.setResizable(false);
	    this.setAlwaysOnTop(false);
	    this.setLocationRelativeTo(null);
	    
	    sensores.cargarTren(UtilServidor.devolverTren());
	    
	    sensores.listsensor.addActionListener(new escuchador());
	    
	    sensores.panelGps.on.addActionListener(new escuchador());
	    sensores.panelGps.off.addActionListener(new escuchador());
	    
	    sensores.temperatura.historico.addActionListener(new escuchador());
	    sensores.velocidad.historico.addActionListener(new escuchador());
	    sensores.humedad.historico.addActionListener(new escuchador());
	    
	    sensores.temperatura.on.addActionListener(new escuchador());
	    sensores.temperatura.off.addActionListener(new escuchador());
	    sensores.velocidad.on.addActionListener(new escuchador());
	    sensores.velocidad.off.addActionListener(new escuchador());
	    sensores.humedad.on.addActionListener(new escuchador());
	    sensores.humedad.off.addActionListener(new escuchador());
	    
	    sensores.temperatura.valAct.addActionListener(new escuchador());
	    sensores.velocidad.valAct.addActionListener(new escuchador());
	    sensores.humedad.valAct.addActionListener(new escuchador());
	    
	    sensores.panelGps.coordenadas.addActionListener(new escuchador());
	    
	    actualizar.addActionListener(new escuchador());
	    
	    salir.addActionListener(new escuchador());
	}
	
	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException, SQLException, IOException
	{
		// TODO Auto-generated method stub
		
		UIManager.setLookAndFeel( "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel" );
		VentanaTren v = new VentanaTren(new SocketManager("127.0.0.1", 6968));
		v.setVisible(true);
	}
	
	class escuchador implements ActionListener
	{

		@Override
		public void actionPerformed(ActionEvent e)
		{
			// TODO Auto-generated method stub
			if(e.getSource() == salir)
			{
				try
				{
					sock.Escribir("SALIR" + '\n');
					String s = sock.Leer();
					if(s.charAt(0) == '2')
					{
						sock.CerrarSocket();
						JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
						dispose();
					}
				}
				catch (IOException e1)
				{
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
			else
			{
				if(e.getSource() == sensores.panelGps.on)
				{
					try
					{
						sock.Escribir("ONGPS" + '\n');
						String s = sock.Leer();
						JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
					}
					catch (IOException e1)
					{
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
				}
				else
				{
					if(e.getSource() == sensores.panelGps.off)
					{
						try
						{
							sock.Escribir("OFFGPS" + '\n');
							String s = sock.Leer();
							JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
						}
						catch (IOException e1)
						{
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}
					}
					else
					{
						if(e.getSource() == sensores.temperatura.historico)
						{
							try
							{
								sock.Escribir("HISTORICO 01" + '\n');
								String s = sock.Leer();
								if(s.charAt(0) != '4')
								{
									LinkedList<String> l = new LinkedList<String>();
									while(!s.contains("222"))
									{
										l.add(s);
										s = sock.Leer();
									}
									l.add(s);
									VentanaInfo v = new VentanaInfo(l);
									v.setVisible(true);
								}
								else
								{
									JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
								}
							}
							catch (IOException e1)
							{
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}
						}
						else
						{
							if(e.getSource() == sensores.velocidad.historico)
							{
								try
								{
									sock.Escribir("HISTORICO 02" + '\n');
									String s = sock.Leer();
									if(s.charAt(0) != '4')
									{
										LinkedList<String> l = new LinkedList<String>();
										while(!s.contains("222"))
										{
											l.add(s);
											s = sock.Leer();
										}
										l.add(s);
										VentanaInfo v = new VentanaInfo(l);
										v.setVisible(true);
									}
									else
									{
										JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
									}
								}
								catch (IOException e1)
								{
									// TODO Auto-generated catch block
									e1.printStackTrace();
								}
							}
							else
							{
								if(e.getSource() == sensores.humedad.historico)
								{
									try
									{
										sock.Escribir("HISTORICO 03" + '\n');
										String s = sock.Leer();
										if(s.charAt(0) != '4')
										{
											LinkedList<String> l = new LinkedList<String>();
											while(!s.contains("222"))
											{
												l.add(s);
												s = sock.Leer();
											}
											l.add(s);
											VentanaInfo v = new VentanaInfo(l);
											v.setVisible(true);
										}
										else
										{
											JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
										}
									}
									catch (IOException e1)
									{
										// TODO Auto-generated catch block
										e1.printStackTrace();
									}
								}
								else
								{
									if(e.getSource() == sensores.listsensor)
									{
										try
										{
											sock.Escribir("LISTSENSOR" + '\n');
											String s = sock.Leer();
											if(s.charAt(0) != '4')
											{
												LinkedList<String> l = new LinkedList<String>();
												while(!s.contains("222"))
												{
													l.add(s);
													s = sock.Leer();
												}
												l.add(s);
												VentanaInfo v = new VentanaInfo(l);
												v.setVisible(true);
											}
										}
										catch (IOException e1)
										{
											// TODO Auto-generated catch block
											e1.printStackTrace();
										}
									}
									else
									{
										if(e.getSource() == sensores.temperatura.on)
										{
											try
											{
												sock.Escribir("ON 01" + '\n');
												String s = sock.Leer();
												JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
											}
											catch (IOException e1)
											{
												// TODO Auto-generated catch block
												e1.printStackTrace();
											}
										}
										else
										{
											if(e.getSource() == sensores.temperatura.off)
											{
												try
												{
													sock.Escribir("OFF 01" + '\n');
													String s = sock.Leer();
													JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
												}
												catch (IOException e1)
												{
													// TODO Auto-generated catch block
													e1.printStackTrace();
												}
											}
											else
											{
												if(e.getSource() == sensores.velocidad.on)
												{
													try
													{
														sock.Escribir("ON 02" + '\n');
														String s = sock.Leer();
														JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
													}
													catch (IOException e1)
													{
														// TODO Auto-generated catch block
														e1.printStackTrace();
													}
												}
												else
												{
													if(e.getSource() == sensores.velocidad.off)
													{
														try
														{
															sock.Escribir("OFF 02" + '\n');
															String s = sock.Leer();
															JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
														}
														catch (IOException e1)
														{
															// TODO Auto-generated catch block
															e1.printStackTrace();
														}
													}
													else
													{
														if(e.getSource() == sensores.humedad.on)
														{
															try
															{
																sock.Escribir("ON 03" + '\n');
																String s = sock.Leer();
																JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
															}
															catch (IOException e1)
															{
																// TODO Auto-generated catch block
																e1.printStackTrace();
															}
														}
														else
														{
															if(e.getSource() == sensores.humedad.off)
															{
																try
																{
																	sock.Escribir("OFF 03" + '\n');
																	String s = sock.Leer();
																	JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
																}
																catch (IOException e1)
																{
																	// TODO Auto-generated catch block
																	e1.printStackTrace();
																}
															}
															else
															{
																if(e.getSource() == sensores.panelGps.coordenadas)
																{
																	try
																	{
																		sock.Escribir("GET_LOC" + '\n');
																		String s = sock.Leer();
																		JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
																	}
																	catch (IOException e1)
																	{
																		// TODO Auto-generated catch block
																		e1.printStackTrace();
																	}
																}
																else
																{
																	if(e.getSource() == sensores.temperatura.valAct)
																	{
																		try
																		{
																			sock.Escribir("GET_VALACT 01" + '\n');
																			String s = sock.Leer();
																			JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
																		}
																		catch (IOException e1)
																		{
																			// TODO Auto-generated catch block
																			e1.printStackTrace();
																		}
																	}
																	else
																	{

																		if(e.getSource() == sensores.velocidad.valAct)
																		{
																			try
																			{
																				sock.Escribir("GET_VALACT 02" + '\n');
																				String s = sock.Leer();
																				JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
																			}
																			catch (IOException e1)
																			{
																				// TODO Auto-generated catch block
																				e1.printStackTrace();
																			}
																		}
																		else
																		{

																			if(e.getSource() == sensores.humedad.valAct)
																			{
																				try
																				{
																					sock.Escribir("GET_VALACT 03" + '\n');
																					String s = sock.Leer();
																					JOptionPane.showMessageDialog(null, s, "", JOptionPane.INFORMATION_MESSAGE, null);
																				}
																				catch (IOException e1)
																				{
																					// TODO Auto-generated catch block
																					e1.printStackTrace();
																				}
																			}
																			else
																			{
																				if(e.getSource() == actualizar)
																				{
																					try
																					{
																						sock.Escribir("ACTUALIZAR" + '\n');
																					}
																					catch (IOException e1)
																					{
																						// TODO Auto-generated catch block
																						e1.printStackTrace();
																					}
																				}
																			}
																		}
																	}
																}
															}
														}
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
}
